﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Knights.Objeto.Tecnicas
{
    abstract class Tecnica : ITecnica
    {
        private int NivelMaximo = 5;

        protected Caballero miCaballero;
        protected string nombre;
        protected int nivel, recarga, duracion, actualRec, actualDurac;
        private int costo;
        protected string mensaje;

        public Tecnica(Caballero caballero, string nombre, int costo, int recarga, int duracion)
        {
            this.miCaballero = caballero;
            this.nombre = nombre;
            nivel = 1;
            this.costo = costo;
            this.recarga = recarga;
            this.duracion = duracion;
            actualRec = recarga + 1;
            actualDurac = 0;

            mensaje = "";
        }

        public Tecnica(Caballero caballero, string nombre, int costo)
            : this(caballero, nombre, costo, 0, 0)
        { }

        public abstract void Activar();

        public void SubirNivel()
        {
            if(nivel < NivelMaximo)
                nivel++;
        }

        public void Recargar()
        {
            if (actualRec <=  recarga)
                actualRec++;

            //duracion
            if (actualDurac <= duracion)
                actualDurac++;
            else
                Desactivar();
        }

        protected virtual void Desactivar() { }

        public bool EnergiaSuficiente()
        {
            if (miCaballero.Energia >= costo)
            {
                miCaballero.Energia -= costo;
                return true;
            }
            else
            {
                mensaje = "Energia insuficiente";
                return false;
            }
        }

        public bool EstaEnRecarga()
        {
            if (actualRec <= recarga)
            {
                mensaje = "Tecnica en Recarga";
                return true;
            }
            else
                return false;
        }

        public string Mensaje
        {
            get
            {
                string texto = mensaje;
                mensaje = "";
                return texto;
            }
        }
    }
}
